package test;

import java.io.*;

public class Demo01 {

    public static void main(String[] args) throws IOException {

        /*
            字节流
            InputSteam : 读取内容
                FileInputSteam
                BufferedInputSteam
            OutputSteam : 写入内容
                FileOutputStream
                BufferedOutputSteam

            字符流
            Reader : 读取内容
                FileReader
                BufferedReader
            Writer : 写入内容
                FileWriter
                BufferedWriter
         */

        // 获取文件对象 test.txt文件
        File file = new File("test.txt");

        // 通过文件创建 读取和写入 字节流 append代表追加字符
        // 读取字节流
        FileInputStream fileInputStream = new FileInputStream(file);
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
        // 写入字节流
        FileOutputStream fileOutputStream = new FileOutputStream(file,true);
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);

        boolean flag = true;

        if(flag){
            // 使用读取字节流

            // 用于接受读取到的字节
            byte[] buf = new byte[1024];
            int off = 0;
            int len = 6;

            // byte[] b 代表一次读取多少个字节
            // int off 偏移量，跳过多少个字节
            // int len 长度，代表读取多少个字节
            // read 代表实际上读取到多少个字节
            bufferedInputStream.read(buf, off, len);

            System.out.println(new String(buf));
        }

        if (!flag){
            // 使用写入字节流

            // 用于定义写入的字节
//            byte[] buf = new byte[]{97, 98, 99};
            byte[] buf = "hello Output".getBytes();

            // byte[] b 代表一次写多少个字节
            // int off 偏移量，跳过多少个字节
            // int len 长度，代表读取多少个字节
            // 将字节写入缓冲/存区
            bufferedOutputStream.write(buf);

            // 刷新，将缓存区的字符写入文件
            bufferedOutputStream.flush();

            // 关闭，但是包含了flush刷新
            bufferedOutputStream.close();
        }


        // 通过文件创建 读取和写入 字符流 append代表追加字符
        // 读取字符流
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        // 写入字符流
        FileWriter fileWriter = new FileWriter(file,true);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

        if(!flag){
            // 使用读取字符流

            // 用于接受读取到的字符
            char[] cbuf = new char[1024];
            int off = 0;
            int len = 6;

            // char[] cbuf 代表一次读取多少个字符
            // int off 偏移量，跳过多少个字符
            // int len 长度，代表读取多少个字符
            // read 代表实际上读取到多少个字符
            int read = bufferedReader.read(cbuf, off, len);

            System.out.println(new String(cbuf));

        }

        if(flag){
            // 使用写入字符流

            // 将字符串写入缓冲/存区
            bufferedWriter.write("hello world");

            // 刷新，将缓存区的字符写入文件
            bufferedWriter.flush();

            // 关闭，但是包含了flush刷新
            bufferedWriter.close();

        }
    }

}
